import { defineConfig, loadEnv }from 'vite'
import type { UserConfig, ConfigEnv } from 'vite'
import { fileURLToPath } from 'url'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx' 

export default defineConfig(({mode}: ConfigEnv): UserConfig => {
    // 当前工作目录
    const root = process.cwd()
    // 获取环境变量
    const env = loadEnv(mode, root)

    return {
        // 项目根目录
        root,
        // 项目部署的基础路径
        base: env.VITE_APP_BASE_URL,
        publicDir: fileURLToPath(new URL('./public', import.meta.url)), // 无需处理的静态资源目录
        assetsInclude: fileURLToPath(new URL('./src/assets', import.meta.url)), // 需要处理的静态资源目录
        plugins: [
            // vue 模板文件编译插件
            vue(),
            // jsx文件编译插件
            vueJsx(),
        ],
        // 运行后本预览服务器的选项
        // server: {
        //     // 是否开启https,
        //     https: false,
        //     // 指定服务器应该监听哪个IP地址。如果将此设置为 0.0.0.0 或者 true 将监听所有地址，包括局域网和公网地址。
        //     host: true,
        //     // 开发环境预览服务器端口号
        //     port: 9000,
        //     // 启动后是否自动打开浏览器
        //     open: false,
        //     // 是否开启 cors
        //     cors: true,
        //     // 代理服务器
        //     proxy: {
        //         [env.VITE_APP_API_BASEURL]: {
        //             target: "http://localhost:9000",
        //             // 改变HOST header
        //             changeOrigin: true,
        //             // 发起请求时将 '/api' 替换为 ’‘
        //             // rewrite: path => path.replace(new RegExp(`^${env.VITE_APP_API_BASEURL}`), '')
        //         },
        //         [env.VITE_APP_MOCK_BASEURL]: {
        //             target: "http://localhost:9001",
        //             // 改变HOST header
        //             changeOrigin: true,
        //             // 发起请求时将 '/api' ��换为 ’‘
        //             // rewrite: path => path.replace(new RegExp(`^${env.VITE_APP_MOCK_BASEURL}`), '')
        //         }
        //     }
        // },
        // 打包配置
        build: {
            // 关闭sorcemap 报错不会映射到源码
            sourcemap: false,
            // 打包大小超出400kb 提示警告
            chunkSizeWarningLimit: 400,
            rollupOptions: {
                // 打包入口文件  根目录下的 index.html
                input: fileURLToPath(
                    new URL('./index.html', import.meta.url)
                ),
                // 静态资源分类打包
                output: {
                    format: "esm",
                    chunkFileNames: "static/js/[name]-[hash].js",
                    entryFileNames: "static/js/[name]-[hash].js",
                    assetFileNames: "static/[ext]/[name]-[hash].[ext]"
                }
            },
        },
        // 配置别名
        resolve: {
            alias: {
                '@': fileURLToPath(new URL('./src', import.meta.url)),
                "#": fileURLToPath(new URL('./types', import.meta.url))
            }
        }
    }
}) 